想用最短的时间分享一个最简单,却不为人熟知的知识点。话不多说,开始…
package.json 中的 “^”、“~”、“”
如果你认真观察过你的 package.json 文件的话,你一定会发现,有的依赖版本号前是 ^,有的是~,有的版本号前没有任何符号
"devDependencies": {
"@alifd/next": "^1.22.11",
"@babel/plugin-proposal-decorators": "~7.13.5",
"axios": "^0.21.1",
"classnames": "~2.2.6",
"moment": "2.29.1",
}
先理解下版本号的规则: [major, minor, patch] , 分别是:大版本、小版本、补丁版本
-
^ 表示大版本不变,小版本和补丁版本会安装最新的。举个例子:
“@alifd/next”: “^1.22.11”,版本包括 >=1.22.11 并且 < 2.0.0
这里有个坑,如果大版本是 0 的话,此时 “^” 和“~”的行为是一样的,因为大版本为 0 则表示此时处于开发阶段, 即使是小版本号变动,也可能带来程序的不兼容。
“axios”: “^0.21.1”,版本包括 >=0.21.1 并且 < 0.22.0
-
~ 表示大版本和小版本不变,补丁版本会安装最新的。举个例子:
“@babel/plugin-proposal-decorators”: “~7.13.5”,版本包括 >=7.13.5 并且 < 7.14.0
“classnames”: “~2.2.6”,版本包括 >=2.2.6 并且 < 2.3.0
-
指定版本,即无 ^、~。举个例子:
“moment”: “2.29.1”,只会安装 2.29.1 版本
package-lock.json 和 yarn.lock 是做什么的
其实看名字就能猜到大概的作用了,就是锁定安装的版本。从上面的知识点我们知道,版本号前的 “^” 和“~”会导致不同时间段安装的依赖包源码可能是不一样的,这时可能就会给我们的程序带来未知的错误,为了避免这个情况的发生,无论是使用 yarn 安装还是 npm 安装,都会给我们生成一个锁定版本的文件(即 package-lock.json 和 yarn.lock)
总结:所以当我们将代码提交至代码库的时候,千万不要把 package-lock.json 或 yarn.lock 忽略了哦